package org.csu.springjpetstore.service;

import org.csu.springjpetstore.domain.Cart;
import org.csu.springjpetstore.domain.CartItem;
import org.csu.springjpetstore.domain.Item;
import org.csu.springjpetstore.domain.ShoppingCart;
import org.csu.springjpetstore.persistence.ItemDAO;
import org.csu.springjpetstore.persistence.ShoppingCartDAO;
import org.csu.springjpetstore.persistence.impl.ItemDAOImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class CartService {
    @Autowired(required = false)
    private ShoppingCartDAO shoppingCartDAO;
    @Autowired
    private CatalogServiceImpl catalogServiceImpl;

    /**
     * description 获取购物车
     *
     * @param username:
     * @return Cart
     * @author huangzhangyan
     * @date 2022/1/10 15:25
     */
    public Cart getCartByName(String username) {
        //通过该类的私有方法 获取所有的购物车物品
        List<CartItem> cartItemList = this.getCartListByName(username);
        Cart cart = new Cart(cartItemList);
        return cart;
    }


    /**
     * description 添加一个CartItem进购物车
     *
     * @param username:
     * @param cartItem:
     * @author huangzhangyan
     * @date 2022/1/10 15:25
     */
    public void addIntoCart(String username, CartItem cartItem) {
        List<CartItem> list = this.getCartListByName(username);

        //局部代码块(普通代码块):控制变量的生命周期,提高内存利用率
        {
            //临时变量
            Cart tmpCart = new Cart(list);
            tmpCart.addCartItem(cartItem);
            list = tmpCart.getCartItemList();
            shoppingCartDAO.deleteFullCart(username);
        }

        //tmpCart在这里会报错
        for (CartItem cartItem1 : list) {
            Item item = cartItem1.getItem();
            shoppingCartDAO.store(username, item.getItemId(), cartItem1.getQuantity(), cartItem1.getInStock(), cartItem1.getCartItemTotal());
        }
    }

    /**
     * description 删除一个在购物车
     * `@param username:
     *
     * @param itemId: `
     * @author huangzhangyan
     * @date 2022/1/10 15:25
     */
    public void deleteInCart(String username, String itemId) {
        //根据itemId获取Item
//        Item item = catalogServiceImpl.getItem(itemId);  //等着改

        //
//        List<CartItem> list = this.getCartListByName(username);
//        {
//            //临时变量
//            Cart tmpCart = new Cart(list);
//            CartItem cartItem = new CartItem();
//            cartItem.setItem(item);
//            tmpCart.addCartItemIgnoreQuantity(cartItem);
//            list = tmpCart.getCartItemList();
//        }
//        for(CartItem cartItem1 : list) {
//            Item item1 = cartItem1.getItem();
//            shoppingCartDAO.store(username, item1.getItemId(),cartItem1.getQuantity(),cartItem1.getInStock(),cartItem1.getCartItemTotal());
//        }
        shoppingCartDAO.deleteCart(username, itemId);
    }

    public void deleteInCart1(String username) {

        shoppingCartDAO.deleteCart1(username);
    }

    //以下为impl的私有方法 不想被其他类调用

    /**
     * description 获取用户下的所有的购物车物品
     *
     * @param username:
     * @return List<CartItem>
     * @author huangzhangyan
     * @date 2022/1/10 15:26
     */
    public List<CartItem> getCartListByName(String username) {
        List<CartItem> list = new ArrayList<>();
        List<ShoppingCart> list1 = shoppingCartDAO.getCartList(username);
        for (ShoppingCart shopping_cart : list1) {
            CartItem cartItem = new CartItem();
            ItemDAO itemDAO = new ItemDAOImpl();
            cartItem.setItem(itemDAO.getItem(shopping_cart.getItemId()));
            cartItem.setInStock(true);
            cartItem.setQuantity(shopping_cart.getQuantity());
            list.add(cartItem);
        }
        System.out.println("________________________________________");
        for (CartItem cartItem : list) {
            System.out.println(cartItem.toString());
        }
        System.out.println("________________________________________");

        return list;
    }
}
